Дотфускатор

Матеріал з Словник з інформатики
Перейти до: навігація, пошук

Дотфускатор - це інструмент, що дозволяє захистити програмний код додатку від зворотньої інженерії (декомпіляції). Це відбувається за рахунок зміни самого початкового коду. Після таких правок ні логіка роботи програми, ні її функціональність не змінюються, проте, якщо до такого додатку зловмисник або конкурент потім застосує декомпіляцію, то код програми йому буде зрозуміти дуже важко. Тобто, по суті, дотфускатор - це один із інструментів, що виконують функції обфускації (приховування початкового коду).

Де потрібен дотфускатор?

Компілятори більшості простих мов програмування, таких як C++, створюють на виході машинний код. На відміну від подібних мов, Java, та створені на її принципах мови платформи .NET, такі як C#, насправді не компілюються в повному значенні цього слова. Транслятори цих мов дають на виході не машинний код, а лише байт-код (машинно-незалежний код, що потім виконується інтерпретатором). З такого байт-коду (у випадку з C# - це майкрософт-версія Common Intermediate Language (CIL), яку скорочено називають IL - Intermediate Language) зовсім не важко отримати початковий код програми. Звісно, що така перспектива не могла підштовхнути програмістів перейти на платформу .NET. Саме тому корпорація Microsoft була змушена додати до своєї Visual Studio інструмент, який би робив програмування на їхніх мовах безпечним.

Дотфускатор як частина Visual Studio

Вибір корпорації Microsoft упав на Dotfuscator, розроблений компанією PreEmptive Solutions. Скорочена версія цього продукту випускається безкоштовно як Dotfuscator Community Edition - один із інструментів Visual Studio. Дотфускатор не лише приховує код програми, написаної під платформу NetFramework, а й оптимізує код з точки зору Instruction List. Саме програмне забезпечення при цьому залишається таким самим, яким воно було до зміни його байт-коду в дотфускаторі. Проте не дивлячись на будь-які завіряння Microsoft щодо використання дотфускатора, потрібно розуміти, що ніяких стовідсоткових гарантій щодо безпеки коду і неможливості його успішної декомпіляції немає. Адже даний інструмент по рівню захисту не стоїть і близько до криптографічних систем.

Оптимізація коду

Початковий код програми оптимізується перш за все за рахунок того, що всі константи замінюються числами. Також оптимізуються ініціалізації масивів та деякі інші місця, які покращити вручну в початковому коді доволі проблематично. В зв'язку із цим готовий байт-код після проведення змін в дотфускаторі займає дещо менше місця, та, як правило, працює швидше.

Приклади

Застосуємо дотфускатор до наступного початкового коду:

void prime_numbers(int num) {
  int i, j, composites;
  for(i = 2; i < num; i++) {
    composites = 0;
    for(j = 2; j < i; j++) 
      composites += !(i % j);
    if(!composites)
      printf("%d\t", i);
  }
}

int main() { 
  prime_numbers(100);
}

Як наслідок роботи дотфускатора може бути отримано наступний код:

_(__,___,____){___/__<=1?_(__,___+1,____):!(___%__)?_(__,___+1,0):___%__==___/
__&&!____?(printf("%d\t",___/__),_(__,___+1,0)):___%__>1&&___%__<___/__?_(__,1+
___,____+!(___/__%(___%__))):___<__*__?_(__,___+1,____):0;}main(){_(100,0,0);}